﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
using System.Windows;
using CapaPresentacion.Commands;
using Entidades;
using CapaLogica;
using CapaPresentacion.Vistas;
using Microsoft.Win32;
using System.Windows.Media.Imaging;
using System.Transactions;
using System.Collections.ObjectModel;

namespace CapaPresentacion.Controles
{
    class PagarInscripcionAlumnoViewModel
    {


        #region Variables de clase

        public event ReiniciarCU ReiniciarCU;
        public event IrMenuPrincipal IrMenuPrincipal;

        private DateTime fechaPagoInscripcion;
        private RelayCommand saveCommand;
        private RelayCommand newCommand;
        
        private PagarInscripcionAlumno view;
        
        public List<ViewEntity> ListaAlumnos { get; set; }
        
        #endregion

        #region Propiedades Públicas
        

        public ICommand SaveCommand
        {
            get
            {
                return saveCommand;
            }
        }

        public ICommand NewCommand
        {
            get
            {
                return newCommand;
            }
        }

        public DateTime FechaPagoInscripcion
        {
            get
            {
                return fechaPagoInscripcion;
            }
            set
            {
                fechaPagoInscripcion = value;

            }
        }
     
        #endregion

        public PagarInscripcionAlumnoViewModel() { }

        public void Inicializar(PagarInscripcionAlumno vista)
        {
            this.view = vista;
            this.view.lblInscripcionVigente.Content = new VigenciaParametroLogica().ObtenerPrecioInscripcionVigente();

            if (new CicloLectivoLogica().ExisteEntidadAñoActual())
            {
                if (this.view.lblInscripcionVigente.Content.ToString() != "NO")
                {
                    ListaAlumnos = new PagarInscripcionLogica().ObtenerAlumnosSinPagoInscripcion();

                    if (ListaAlumnos.Count != 0)
                    {
                        this.view.lblAñoInscripcion.Content = DateTime.Now.Year.ToString();
                        this.view.fechaPagoInscripcionAlumno.SelectedDate = DateTime.Now;

                        this.saveCommand = new RelayCommand(GuardarPagoInscripcion);
                        this.newCommand = new RelayCommand(NuevoPagoInscripcion);
                    }
                    else
                    {
                        VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No hay alumnos inscriptos que no hayan pagado la inscripción");
                        nueva.ShowDialog();
                        this.ReiniciarCU(CasosDeUso.IrMenuPrincipal);

                    }
                }

                else
                {
                    VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe fijar un precio para la inscripcion");
                    nueva.ShowDialog();
                    this.ReiniciarCU(CasosDeUso.NuevoParametroGeneral);

                }

            }
            else
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No existe un ciclo lectivo creado para el año actual");
                nueva.ShowDialog();
                this.ReiniciarCU(CasosDeUso.NuevoCicloLectivo);

            }

       
         }

            

        private void NuevoPagoInscripcion(Object parameter)
        {
            if (MessageBox.Show("¿Está seguro que desea realizar un nuevo pago de inscripción?", "Confirme su Decisión", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
            {
                this.ReiniciarCU(CasosDeUso.NuevoPagoInscripcion);
            }
        }


        private void GuardarPagoInscripcion(Object parameter)
        {

            if (MessageBox.Show("¿Está seguro que desea guardar los datos?", "Confirme su Decisión", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
            {                
                    try
                    {
                       
                        if (this.Validaciones())
                        {
                            Guid idCicloActual = new CicloLectivoLogica().ObtenerEntidad(DateTime.Now.Year).IdCicloLectivo;
                            foreach (ViewEntity item in this.view.listaDatos.SelectedItems)
                            {
                                PagoInscripcion nuevoPago = new PagoInscripcion();
                                nuevoPago.IdPagoInscripcion = Guid.NewGuid();
                                nuevoPago.LegajoAlumno = item.Id;
                                nuevoPago.IdCicloLectivo = idCicloActual;
                                nuevoPago.MesDePago = ObtenerNombreMes(fechaPagoInscripcion.Month);
                                nuevoPago.Eliminada = false;
                                nuevoPago.ImporteInscripcion = Convert.ToDecimal(this.view.lblInscripcionVigente.Content.ToString());

                                new PagarInscripcionLogica().Agregar(nuevoPago);
                            }

                            VentanaAviso nueva = new VentanaAviso(false, "Finalización Exitosa", "El pago de las inscripciones ha sido guardado correctamente");
                            nueva.ShowDialog();

                            this.IrMenuPrincipal(null);


                        }
                       

                    }
                    catch (Exception)
                    {

                        VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "  Ha ocurrido un error y el pago de las inscripciones no se ha guardado");
                        nueva.ShowDialog();

                    }

            }


        }


        private bool Validaciones()
        {

            if (FechaPagoInscripcion.ToShortDateString() == null || FechaPagoInscripcion.ToShortDateString() == "01/01/0001")
            {
                this.fechaPagoInscripcion = DateTime.Now;
            }
            else
            {
                if (FechaPagoInscripcion.Year.ToString() != this.view.lblAñoInscripcion.Content.ToString())
                {
                    VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "El año de la fecha de pago debe coincidir con el año actual");
                    nueva.ShowDialog();
                    return false;
                    
                }
            }
                    
            if (this.view.listaDatos.SelectedItems.Count == 0)
            {

                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe seleccionar al menos un alumno");
                nueva.ShowDialog();
                return false;
            }
                       

            return true;
        }


        internal string ObtenerNombreMes(int mes)
        {

            switch (mes)
            {

                case 1:
                    return "Enero";

                case 2:
                    return "Febrero";

                case 3:
                    return "Marzo";

                case 4:
                    return "Abril";

                case 5:
                    return "Mayo";

                case 6:
                    return "Junio";

                case 7:
                    return "Julio";

                case 8:
                    return "Agosto";

                case 9:
                    return "Septiembre";

                case 10:
                    return "Octubre";

                case 11:
                    return "Noviembre";

                case 12:
                    return "Diciembre";

                default: return "Ninguno";

            }

        }






    }
}
